package com.ruoyi.business.mapper;

import com.ruoyi.business.domain.OrderInfo;
import com.ruoyi.business.domain.OrderInfoDetail;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 订单管理Mapper接口
 *
 * @author ruoyi
 * @date 2025-07-11
 */
public interface OrderInfoMapper {
    /**
     * 查询订单管理
     *
     * @param outerOrderNo 订单管理主键
     * @return 订单管理
     */
    public OrderInfo selectOrderInfoByOuterOrderNo(String outerOrderNo);

    /**
     * 查询订单管理列表
     *
     * @param orderInfo 订单管理
     * @return 订单管理集合
     */
    public List<OrderInfo> selectOrderInfoList(OrderInfo orderInfo);

    /**
     * 新增订单管理
     *
     * @param orderInfo 订单管理
     * @return 结果
     */
    public int insertOrderInfo(OrderInfo orderInfo);

    /**
     * 修改订单管理
     *
     * @param orderInfo 订单管理
     * @return 结果
     */
    public int updateOrderInfo(OrderInfo orderInfo);

    /**
     * 删除订单管理
     *
     * @param outerOrderNo 订单管理主键
     * @return 结果
     */
    public int deleteOrderInfoByOuterOrderNo(String outerOrderNo);
    int updateOrderInfoByOuterOrderNo(@Param("updateBy") String updateBy,
                                      @Param("outerOrderNo") String outerOrderNos);

    /**
     * 批量删除订单管理
     *
     * @param outerOrderNos 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteOrderInfoByOuterOrderNos(String[] outerOrderNos);

    /**
     * 批量删除订单详情
     *
     * @param outerOrderNos 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteOrderInfoDetailByOutitemIds(String[] outerOrderNos);

    int updateOrderInfoByOuterOrderNos(@Param("updateBy") String updateBy,
                                          @Param("outerOrderNos") List<String> outerOrderNos);

    /**
     * 批量新增订单详情
     *
     * @param orderInfoDetailList 订单详情列表
     * @return 结果
     */
    public int batchOrderInfoDetail(List<OrderInfoDetail> orderInfoDetailList);


    /**
     * 通过订单管理主键删除订单详情信息
     *
     * @param outerOrderNo 订单管理ID
     * @return 结果
     */
    public int deleteOrderInfoDetailByOutitemId(String outerOrderNo);

    /**
     * 根据订单编号查询订单详情列表
     *
     * @param outerOrderNo 订单编号
     * @return 订单详情列表
     */
    List<OrderInfoDetail> selectOrderInfoDetailByOuterOrderNo(String outerOrderNo);


    /**
     * 修改订单金额
     *
     * @param outerOrderNo 订单管理
     * @return 结果
     */
    public int updatePayAmt(String outerOrderNo);

    /**
     * 修改订单积分
     *
     * @param orderInfo1 订单管理
     * @return 结果
     */
    public int updatePayAmt2(OrderInfo orderInfo1);


    /**
     * 批量获取订单信息
     *
     * @param outerOrderNos
     * @return
     */
    List<OrderInfo> selectOrderInfoByOuterOrderNos(@Param("outerOrderNos") List<String> outerOrderNos);

    int updateOrderStatus(@Param("outerOrderNo") String outerOrderNo,
                          @Param("status") Integer status,
                          @Param("updateBy") String updateBy);

    int updateOrderNo(@Param("outerOrderNo") String outerOrderNo,
                          @Param("status") Integer status,@Param("remark5") Long remark5,
                          @Param("updateBy") String updateBy);


    List<OrderInfo> autoFinshedOrderList(@Param("expireTime") LocalDateTime expireTime);

    int updateRestoreStatus(@Param("outerOrderNo") String outerOrderNo,
                        @Param("restoreStatus") Integer restoreStatus
                        );
}
